package com.ruoyi.framework.config;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * 自定义 Long 序列化器：根据数值转换为字符串后的长度决定是否序列化为字符串
 * 例如：长度大于 15 位的 Long 序列化为字符串，否则保持为数字。
 */
public class ConditionalLongToStringSerializer extends JsonSerializer<Long> {

    // 定义阈值，例如：超过 15 位的数字序列化为字符串
    private static final int THRESHOLD_LENGTH = 15;

    @Override
    public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if (value == null) {
            gen.writeNull();
            return;
        }

        // 将 Long 转换为字符串并计算其长度
        String valueAsString = value.toString();
        int length = valueAsString.length();

        // 根据长度决定序列化方式
        if (length > THRESHOLD_LENGTH) {
            // 长度超过阈值，序列化为 JSON 字符串
            gen.writeString(valueAsString);
        } else {
            // 长度未超过阈值，序列化为 JSON 数字
            gen.writeNumber(value);
        }
    }
}